JSON Web Token
O JSON Web Token (JWT, às vezes pronunciado /dʒɒt/) é um padrão da Internet para a criação de dados com assinatura opcional e/ou criptografia cujo payload contém o JSON que afirma algum número de declarações. Os tokens são assinados usando um segredo privado ou uma chave pública/privada.
Por exemplo, um servidor pode gerar um token com a declaração "logado como administrador" e fornecê-lo a um cliente. O cliente pode então usar esse token para provar que está logado como administrador. Os tokens podem ser assinados pela chave privada de uma parte (geralmente do servidor), para que a parte possa posteriormente verificar se o token é legítimo. Se a outra parte, por alguns meios adequados e confiáveis, estiver na posse da chave pública correspondente, ela também poderá verificar a legitimidade do token.[1]
Os tokens foram projetados para serem compactos, seguros para URL e utilizáveis, especialmente em um contexto de login único (SSO) no navegador da web. As declarações JWT geralmente podem ser usadas para transmitir a identidade de usuários autenticados entre um provedor de identidade e um provedor de serviços ou qualquer outro tipo de declaração, conforme exigido pelos processos de negócios.[2][3]
O JWT depende de outros padrões baseados em JSON: JSON Web Signature e o JSON Web Encryption.[4][5]
Estrutura
[editar | editar código-fonte]Um JWT é composto de três partes, o header, o payload e a assinatura, todas são escritas em JSON, e são codificadas usando Base64.[6]
O header especifica se o token será assinado, e caso seja qual o algorítmo usado para a assinatura usando a declaração obrigatória alg (algorítmo). Além disso pode conter as declarações opcionais typ (tipo de mídia) e cty (tipo de conteúdo).
{
"alg": "HS256",
"typ": "JWT"
}
O payload pode conter qualquer tipo de dado relevante para a aplicação, não existem declarações obrigatórias.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
A assinatura consiste da codificação e encriptação do header, payload e um segredo. Esse campo é usado para provar a autenticidade de um token, prevenindo que ele possa ser modificado por um agente malicioso. As declarações registradas para a assinatura são:
- iss (issuer) quem criou o token;
- sub (subject) sobre quem o token se refere;
- aud (audience) para quem o token é esperado;
- exp (expiration) data de expiração;
- nbf (not before) a partir de quando o token é valido;
- iat (issued at) data de criação;
- jti (jwt id) identificador único;
A assinatura é verificada pela aplicação que deseja validar a autenticidade do token. Se o token for assinado com criptografia assimétrica, a chave pública pode ser optida através de uma API que fornece tal chave no formato de uma JWK.[7]
Ver também
[editar | editar código-fonte]Referências
- ↑ Nickel, Jochen (2016). Mastering Identity and Access Management with Microsoft Azure. [S.l.: s.n.] p. 84. ISBN 9781785887888. Consultado em 20 de julho de 2018
- ↑ Sevilleja, Chris. «The Anatomy of a JSON Web Token». Consultado em 8 de maio de 2015
- ↑ «Atlassian Connect Documentation». developer.atlassian.com. Consultado em 11 de maio de 2020
- ↑ «draft-ietf-jose-json-web-signature-41 - JSON Web Signature (JWS)». tools.ietf.org. Consultado em 8 de maio de 2015
- ↑ «draft-ietf-jose-json-web-encryption-40 - JSON Web Encryption (JWE)». tools.ietf.org. Consultado em 8 de maio de 2015
- ↑ Peyrott, Sebastián (2016–2018). The JWT Handbook (PDF). [S.l.]: Auht0 Inc.
- ↑ «JSON Web Key Sets». Auth0. Consultado em 16 de dezembro de 2022